#include "uart.h"
#include "c51.h"

// 9600bps@11.0592MHz
void uart_init(void) {
  // 波特率不倍速
  PCON &= 0x7F;
  // 8位数据,可变波特率
  SCON = 0x50;
  // 设置定时器模式
  TMOD &= 0x0F;
  // 设置定时器模式
  TMOD |= 0x20;

  // 设置定时初始值
  TL1 = 0xFD;
  // 设置定时重载值
  TH1 = 0xFD;
  // 禁止定时器中断
  ET1 = 0;
  // 定时器1开始计时
  TR1 = 1;
  // CPU 开放中断
  EA = 1;
  // 串口中断
  ES = 1;
}

// 4800bps@11.0592MHz
void uart_4800_init(void) {
  // 0b1000_0000 波特率倍速
  PCON |= 0x80;
  // 8位数据,可变波特率
  SCON = 0x50;
  TMOD &= 0x0F; // 设置定时器模式
  TMOD |= 0x20; // 设置定时器模式

  // 设置定时初始值
  TL1 = 0xF4;
  // 设置定时重载值
  TH1 = 0xF4;
  // 禁止定时器中断
  ET1 = 0;
  // 定时器1开始计时
  TR1 = 1;
  // CPU 开放中断
  EA = 1;
  // 串口中断
  ES = 1;
}

void uart_send_byte(u8 byte) {
  SBUF = byte;
  while (TI == 0) {
  }
  TI = 0;
}
